package com.kaifamiao.files;

import java.io.File;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class FileTest2 {

    public static void main(String[] args) {
        // String pathname = "D:/kaifamiao/codes/java-advanced/files-and-streams/src/com/kaifamiao/files/FileTest2.java";
        String pathname = "D:/kaifamiao/codes/java-advanced";
        File fod = new File( pathname );
        // 若 fod 指向的 File实例 所对应的 路径名称 在磁盘上不存在
        if( !fod.exists() ) {
            System.out.println( pathname + "在磁盘上不存在" );
            return;
        }

        // 若 fod 指向的 File实例 表示的 路径名称 在磁盘上是个文件
        if( fod.isFile() ){
            // 则可以获取文件(file)的相关信息
            long size = fod.length(); // 获得文件体积(即文件大小)
            System.out.println( size + " bytes." );
            long last = fod.lastModified(); // 获得文件最后修改时间(返回从历元至最后一次修改时所经历的毫秒值)
            LocalDateTime datetime = LocalDateTime.ofInstant( Instant.ofEpochMilli( last ) , ZoneId.of("Asia/Chongqing") );
            System.out.println( datetime );
            String name = fod.getName();
            System.out.println( name );
        }

        // 若 fod 指向的 File实例 表示的 路径名称 在磁盘上是个目录
        if( fod.isDirectory() ) {
            // 则可以获得所有直接子项目(即该目录内部的文件和子目录)的名称组成的数组
            String[] names = fod.list();
            for ( String name: names ) {
                System.out.println( name );
            }

            System.out.println( "- - - ".repeat( 5 ) );

            // 也可以获得每一个直接子项目对应的 File实例 组成的数组
            File[] fods = fod.listFiles();
            for ( File fd : fods ) {
                if( fd.isDirectory() ) {
                    System.out.println( "目录 " + fd.getName());
                }
                if( fd.isFile() ) {
                    System.out.println( "文件 " + fd.getName());
                }
            }

            long last = fod.lastModified(); // 获得目录最后修改时间(返回毫秒值)
            LocalDateTime datetime = LocalDateTime.ofInstant( Instant.ofEpochMilli( last ) , ZoneId.of("Asia/Chongqing") );
            System.out.println( datetime );
        }
    }

}
